home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / C / LIB / UNIXLIB37B / !UnixLib37 / src / c / bsearch < prev    next >
Text File  |  1996-11-09  |  979b  |  45 lines

  1. /****************************************************************************
  2.  *
  3.  * $Source: /unixb/home/unixlib/source/unixlib37/src/c/RCS/bsearch,v $
  4.  * $Date: 1996/04/19 21:26:42 $
  5.  * $Revision: 1.1 $
  6.  * $State: Rel $
  7.  * $Author: simon $
  8.  *
  9.  * $Log: bsearch,v $
  10.  * Revision 1.1  1996/04/19 21:26:42  simon
  11.  * Initial revision
  12.  *
  13.  ***************************************************************************/
  14.  
  15. static const char rcs_id[] = "$Id: bsearch,v 1.1 1996/04/19 21:26:42 simon Rel $";
  16.  
  17. #include <sys/syslib.h>
  18. #include <stddef.h>
  19. #include <stdlib.h>
  20.  
  21. void *
  22. bsearch (register const void *k, const void *v, register size_t n,
  23.      register size_t z, register int (*c) (const void *, const void *))
  24.  
  25. {
  26.   register char *b, *m;
  27.   register int p;
  28.  
  29.   b = (char *) v;
  30.  
  31.   while (n)
  32.     {
  33.       m = b + ((n >> 1) * z);
  34.       p = __funcall ((*c), (k, m));
  35.       if (!p)
  36.     return (m);
  37.       if (p > 0)
  38.     b = m + z, n = n - (n >> 1) - 1;
  39.       else
  40.     n = (n >> 1);
  41.     }
  42.  
  43.   return (0);
  44. }
  45.